package com.ltcode.sys.interfaces.converter;

import com.ltcode.sys.domain.model.SysUser;
import com.ltcode.sys.interfaces.dto.SysUserDTO;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 用户DTO转换器
 * 
 * @author ltcode
 * @since 2024-01-01
 */
public class SysUserDTOConverter {

    /**
     * 领域模型转换为DTO
     */
    public static SysUserDTO toDTO(SysUser domain) {
        if (domain == null) {
            return null;
        }
        SysUserDTO dto = new SysUserDTO();
        BeanUtils.copyProperties(domain, dto);
        
        // 转换部门信息
        if (domain.getDept() != null) {
            dto.setDept(SysDeptDTOConverter.toDTO(domain.getDept()));
        }
        
        // 转换角色信息
        if (domain.getRoles() != null && !domain.getRoles().isEmpty()) {
            dto.setRoles(SysRoleDTOConverter.toDTOList(domain.getRoles()));
        }
        
        // 转换岗位信息
        if (domain.getPosts() != null && !domain.getPosts().isEmpty()) {
            dto.setPosts(SysPostDTOConverter.toDTOList(domain.getPosts()));
        }
        
        return dto;
    }

    /**
     * DTO转换为领域模型
     */
    public static SysUser toDomain(SysUserDTO dto) {
        if (dto == null) {
            return null;
        }
        SysUser domain = new SysUser();
        BeanUtils.copyProperties(dto, domain);
        
        // 转换部门信息
        if (dto.getDept() != null) {
            domain.setDept(SysDeptDTOConverter.toDomain(dto.getDept()));
        }
        
        // 转换角色信息
        if (dto.getRoles() != null && !dto.getRoles().isEmpty()) {
            domain.setRoles(SysRoleDTOConverter.toDomainList(dto.getRoles()));
        }
        
        // 转换岗位信息
        if (dto.getPosts() != null && !dto.getPosts().isEmpty()) {
            domain.setPosts(SysPostDTOConverter.toDomainList(dto.getPosts()));
        }
        
        return domain;
    }

    /**
     * 领域模型列表转换为DTO列表
     */
    public static List<SysUserDTO> toDTOList(List<SysUser> domainList) {
        if (domainList == null || domainList.isEmpty()) {
            return new ArrayList<>();
        }
        List<SysUserDTO> dtoList = new ArrayList<>();
        for (SysUser domain : domainList) {
            dtoList.add(toDTO(domain));
        }
        return dtoList;
    }

    /**
     * DTO列表转换为领域模型列表
     */
    public static List<SysUser> toDomainList(List<SysUserDTO> dtoList) {
        if (dtoList == null || dtoList.isEmpty()) {
            return new ArrayList<>();
        }
        List<SysUser> domainList = new ArrayList<>();
        for (SysUserDTO dto : dtoList) {
            domainList.add(toDomain(dto));
        }
        return domainList;
    }
}
